perm filename MATHDL.MF[1,3]2 blob sn#520993 filedate 1980-07-08 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00018 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	% Left parentheses (left-right symmetric with right ones)
C00006 00003	% Right parentheses (left-right symmetric with left ones)
C00009 00004	% Left brackets (left-right symmetric with right ones)
C00012 00005	% Right brackets (left-right symmetric with left ones)
C00015 00006	% Left floor brackets (left-right symmetric with right ones)
C00017 00007	% Right floor brackets (left-right symmetric with left ones)
C00019 00008	% Left ceiling brackets (left-right symmetric with right ones)
C00021 00009	% Right ceiling brackets (left-right symmetric with left ones)
C00023 00010	% Left braces (left-right symmetric with right ones)
C00027 00011	% Right braces (left-right symmetric with left ones)
C00031 00012	% Left angle brackets (left-right symmetric with right ones)
C00033 00013	% Right angle brackets (left-right symmetric with left ones)
C00035 00014	% Vertical lines
C00036 00015	% Slashes
C00038 00016	"Black triangle"
C00039 00017	"Arrow for errata lists"
C00040 00018	% Parts for extensible horizontal braces to match vertical ones
C00042 ENDMK
CāŠ—;
% Left parentheses (left-right symmetric with right ones)
charlist '000,'020,'022,'040,'060,0;
subroutine biglp(var code, var units, var minps, var maxps, var height, var depth):
call charbegin(code,units,-.25,.25,height,depth,0);
new w48,w49; w48=round minps; w49=round maxps;
hpen; x1=x3=good48(r-u);
top48 y1=round pixels.height; bot48y3=1-round pixels.depth; y2=.5[y1,y3];
lft49x2=round u;
y0=y1; y4=y3; x0=x4=x1+1.875(units-2)u;
draw (0..)|w48|1..|w49#|2{0,-1}..|w48|3(..4).	% stroke
"12 point left parenthesis";
call biglp('000,7,w0,w1,0,12pt).
"18 point left parenthesis";
call biglp('020,9,w10,bold,0,18pt); call eighteen.
"24 point left parenthesis";
call biglp('022,11,w10+.2deltaw,bold+deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point left parenthesis";
call biglp('040,11.5,w10+.4deltaw,bold+2deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine biglp:.	% free up \MF's memory
new w98,w99; w98=round(w10+.6deltaw); w99=round(bold+3deltaw);
"Extensible left parenthesis--top";
call charbegin('060,12,-.25,.25,0,18pt,0); crsbreak -12pt.cf;
varchar '060,0,'100,'102;	% extensible left parenthesis
hpen; x1=good98(r-u); top98y1=0;
lft99x2=round u; y2=round(.5-18pt.pixels);
x0=x1+1.875(10u); y0=y1;
draw (0..)|w98|1..|w99#|2{0,-1}.	% upper part of stroke
"Extensible left parenthesis--bottom";
call charbegin('100,12,-.25,.25,0,18pt,0); crsbreak -12pt.cf;
hpen; x3=good98(r-u); bot98y3=round(.5-18pt.pixels);
lft99x2=round u; y2=0;
x4=x3+1.875(10u); y4=y3;
draw |w99#|2{0,-1}..|w98|3(..4).	% lower part of stroke
"Extensible left parenthesis--extension module";
call charbegin('102,12,-.25,.25,0,6pt,0);
varchar 0,0,0,'102;	% left parenthesis extension modules only
hpen; lft99x1=round u; y1=0;
x2=x1; y2=round(.5-6pt.pixels);
w99 draw 1..2.	% middle part of stroke
% Right parentheses (left-right symmetric with left ones)
charlist '001,'021,'023,'041,'061,0;
subroutine bigrp(var code, var units, var minps, var maxps, var height, var depth):
call charbegin(code,units,.25,-.25,height,depth,0);
new w48,w49; w48=round minps; w49=round maxps;
hpen; x1=x3; r-x1=good48(r-u);
top48 y1=round pixels.height; bot48y3=1-round pixels.depth; y2=.5[y1,y3];
lft49(r-x2)=round u;
y0=y1; y4=y3; x0=x4=x1-1.875(units-2)u;
draw (0..)|w48|1..|w49#|2{0,-1}..|w48|3(..4).	% stroke
"12 point right parenthesis";
call bigrp('001,7,w0,w1,0,12pt).
"18 point right parenthesis";
call bigrp('021,9,w10,bold,0,18pt); call eighteen.
"24 point right parenthesis";
call bigrp('023,11,w10+.2deltaw,bold+deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point right parenthesis";
call bigrp('041,11.5,w10+.4deltaw,bold+2deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine bigrp:.	% free up \MF's memory
new w98,w99; w98=round(w10+.6deltaw); w99=round(bold+3deltaw);
"Extensible right parenthesis--top";
call charbegin('061,12,.25,-.25,0,18pt,0); crsbreak -12pt.cf;
varchar '061,0,'101,'103;	% extensible right parenthesis
hpen; r-x1=good98(r-u); top98y1=0;
lft99(r-x2)=round u; y2=round(.5-18pt.pixels);
x0=x1-1.875(10u); y0=y1;
draw (0..)|w98|1..|w99#|2{0,-1}.	% upper part of stroke
"Extensible right parenthesis--bottom";
call charbegin('101,12,.25,-.25,0,18pt,0); crsbreak -12pt.cf;
hpen; r-x3=good98(r-u); bot98y3=round(.5-18pt.pixels);
lft99(r-x2)=round u; y2=0;
x4=x3-1.875(10u); y4=y3;
draw |w99#|2{0,-1}..|w98|3(..4).	% lower part of stroke
"Extensible right parenthesis--extension module";
call charbegin('103,12,.25,-.25,0,6pt,0);
varchar 0,0,0,'103;	%  right parenthesis extension modules only
hpen; lft99(r-x1)=round u; y1=0;
x2=x1; y2=round(.5-6pt.pixels);
w99 draw 1..2.	% middle part of stroke
% Left brackets (left-right symmetric with right ones)
charlist '002,'024,'042,'062,0;
subroutine biglb(var code, var units, var psize, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w49; w49=round psize;
cpen; x1=x4=good49(r-.75u); x2=x3=good49(2.5u);
top49 y1=round pixels.height; bot49y3=1-round pixels.depth; y1=y2; y3=y4;
w49 draw 1..2..2..3..3..4.	% stroke
"12 point left bracket";
call biglb('002,6,w10,0,12pt).
"24 point left bracket";
call biglb('024,7,w10+.2deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point left bracket";
call biglb('042,7.5,w1-.8deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine biglb:.	% free up \MF's memory
new w99; w99=round(w1-.6deltaw);
"Extensible left bracket--top";
call charbegin('062,8,0,0,0,18pt,0); crsbreak -12pt.cf;
varchar '062,0,'064,'066;	% extensible left bracket
cpen; x1=good99(r-.75u); top99y1=0;
x2=good99 2.5u; y2=y1;
x3=x2; y3=round(.5-18pt.pixels);
w99 draw 1..2..2..3.	% upper part of stroke
"Extensible left bracket--bottom";
call charbegin('064,8,0,0,0,18pt,0); crsbreak -12pt.cf;
varchar 0,0,'064,'066;	% extensible left floor bracket
cpen; x4=good99(r-.75u); bot99y4=round(.5-18pt.pixels);
x3=good99 2.5u; y3=y4;
x2=x3; y2=0;
w99 draw 2..3..3..4.	% lower part of stroke
"Extensible left bracket--extension module";
call charbegin('066,8,0,0,0,6pt,0);
varchar '062,0,0,'066;	% extensible left ceiling bracket
cpen; x1=good99 2.5u; y1=0;
x2=x1; y2=round(.5-6pt.pixels);
w99 draw 1..2.	% middle part of stroke
% Right brackets (left-right symmetric with left ones)
charlist '003,'025,'043,'063,0;
subroutine bigrb(var code, var units, var psize, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w49; w49=round psize;
cpen; x1=x4; r-x1=good49(r-.75u); x2=x3; r-x2=good49(2.5u);
top49 y1=round pixels.height; bot49y3=1-round pixels.depth; y1=y2; y3=y4;
w49 draw 1..2..2..3..3..4.	% stroke
"12 point right bracket";
call bigrb('003,6,w10,0,12pt).
"24 point right bracket";
call bigrb('025,7,w10+.2deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point right bracket";
call bigrb('043,7.5,w1-.8deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine bigrb:.	% free up \MF's memory
new w99; w99=round(w1-.6deltaw);
"Extensible right bracket--top";
call charbegin('063,8,0,0,0,18pt,0); crsbreak -12pt.cf;
varchar '063,0,'065,'067;	% extensible right bracket
cpen; r-x1=good99(r-.75u); top99y1=0;
r-x2=good99 2.5u; y2=y1;
x3=x2; y3=round(.5-18pt.pixels);
w99 draw 1..2..2..3.	% upper part of stroke
"Extensible right bracket--bottom";
call charbegin('065,8,0,0,0,18pt,0); crsbreak -12pt.cf;
varchar 0,0,'065,'067;	% extensible right floor bracket
cpen; r-x4=good99(r-.75u); bot99y4=round(.5-18pt.pixels);
r-x3=good99 2.5u; y3=y4;
x2=x3; y2=0;
w99 draw 2..3..3..4.	% lower part of stroke
"Extensible right bracket--extension module";
call charbegin('067,8,0,0,0,6pt,0);
varchar '063,0,0,'067;	% extensible right ceiling bracket
cpen; r-x1=good99 2.5u; y1=0;
x2=x1; y2=round(.5-6pt.pixels);
w99 draw 1..2.	% middle part of stroke
% Left floor brackets (left-right symmetric with right ones)
charlist '004,'026,'044,'064,0;
subroutine biglfb(var code, var units, var psize, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w49; w49=round psize;
cpen; x4=good49(r-.75u); x2=x3=good49(2.5u);
top49 y2=round pixels.height; bot49y3=1-round pixels.depth; y3=y4;
w49 draw 2..3..3..4.	% stroke
"12 point left floor bracket";
call biglfb('004,7,w10,0,12pt).
"24 point left floor bracket";
call biglfb('026,8,w10+.2deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point left floor bracket";
call biglfb('044,8.5,w1-.8deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine biglfb:.	% free up \MF's memory
% Right floor brackets (left-right symmetric with left ones)
charlist '005,'027,'045,'065,0;
subroutine bigrfb(var code, var units, var psize, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w49; w49=round psize;
cpen; r-x4=good49(r-.75u); x2=x3; r-x3=good49(2.5u);
top49 y2=round pixels.height; bot49y3=1-round pixels.depth; y3=y4;
w49 draw 2..3..3..4.	% stroke
"12 point right floor bracket";
call bigrfb('005,7,w10,0,12pt).
"24 point right floor bracket";
call bigrfb('027,8,w10+.2deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point right floor bracket";
call bigrfb('045,8.5,w1-.8deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine bigrfb:.	% free up \MF's memory
% Left ceiling brackets (left-right symmetric with right ones)
charlist '006,'030,'046,'066,0;
subroutine biglcb(var code, var units, var psize, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w49; w49=round psize;
cpen; x1=good49(r-.75u); x2=x3=good49(2.5u);
top49 y1=round pixels.height; bot49y3=1-round pixels.depth; y1=y2;
w49 draw 1..2..2..3.	% stroke
"12 point left ceiling bracket";
call biglcb('006,7,w10,0,12pt).
"24 point left ceiling bracket";
call biglcb('030,8,w10+.2deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point left ceiling bracket";
call biglcb('046,8.5,w1-.8deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine biglcb:.	% free up \MF's memory
% Right ceiling brackets (left-right symmetric with left ones)
charlist '007,'031,'047,'067,0;
subroutine bigrcb(var code, var units, var psize, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w49; w49=round psize;
cpen; r-x1=good49(r-.75u); x2=x3; r-x3=good49(2.5u);
top49 y1=round pixels.height; bot49y3=1-round pixels.depth; y1=y2;
w49 draw 1..2..2..3.	% stroke
"12 point right ceiling bracket";
call bigrcb('007,7,w10,0,12pt).
"24 point right ceiling bracket";
call bigrcb('031,8,w10+.2deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point right ceiling bracket";
call bigrcb('047,8.5,w1-.8deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine bigrcb:.	% free up \MF's memory
% Left braces (left-right symmetric with right ones)
charlist '010,'032,'050,'070,0;
subroutine biglbr(var code, var units, var minps, var maxps, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w48,w49; w48=round minps; w49=round maxps;
hpen; x2=x3=x5=x6=good49(.5r);
x1-x2=x2-x4=.5(units-3)u+eps; x1=x7;
top49y1=round height.pixels; bot49y7=1-round pixels.depth;
y4=.5[y3,y5]=good6(.5[y1,y7]);
y1-y2=y3-y4=y6-y7=(y1-y4)/4;
draw |w48#|1{3(x2-x1),y2-y1}..|w49#|2{0,-1}..|w49#|3{0,-1}..
	|w48#|4{3(x4-x3),y4-y3};	% upper stem
draw |w48#|7{3(x6-x7),y6-y7}..|w49#|6{0,1}..|w49#|5{0,1}..
	|w48#|4{3(x4-x5),y4-y5}.	% lower stem
"12 point left brace";
call biglbr('010,9,w0,w1,0,12pt).
"24 point left brace";
call biglbr('032,11,w10+.2deltaw,bold+deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point left brace";
call biglbr('050,11.5,w10+.4deltaw,bold+2deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine biglbr:.	% free up \MF's memory
new w98,w99; w98=round(w10+.6deltaw); w99=round(bold+4deltaw);
"Extensible left brace--top";
call charbegin('070,12,0,0,0,9pt,0);
varchar '070,'074,'072,'076;	% extensible left brace
hpen; x2=x3=good99(.5r); x1-x2=4.5u+eps;
top99y1=0; y2=.5[y1,y3]; y3=round(.5-9pt.pixels);
draw |w98#|1{3(x2-x1),y2-y1}..|w99#|2{0,-1}..
	3{0,-1}.	% top of upper stem
"Extensible left brace--bottom";
call charbegin('072,12,0,0,0,9pt,0);
varchar '070,0,'073,'076;	% top left, bottom right combination
hpen; x6=x5=good99(.5r); x7-x6=4.5u+eps;
y5=0; y6=.5[y5,y7]; bot99y7=round(.5-9pt.pixels);
draw |w98#|7{3(x6-x7),y6-y7}..|w99#|6{0,1}..
	5{0,1}.	% bottom of lower stem
"Extensible left brace--middle";
call charbegin('074,12,0,0,0,18pt,0); crsbreak -12pt.cf;
varchar 0,0,0,'066;	% left bracket extension modules only
hpen; x2=x6=x3=x5=good99(.5r); x3-x4=4.5u+eps;
y2=good6 .25; y6=good6(.5-18pt.pixels); y4=good6(.5[y2,y6]);
y3=.5[y2,y4]; y3-y4=y4-y5;
draw |w99#|2..|w99#|3{0,-1}..
	|w98#|4{3(x4-x3),y4-y3};	% bottom of upper stem
draw |w99#|6..|w99#|5{0,1}..
	|w98#|4{3(x4-x5),y4-y5}.	% top of lower stem
"Extensible braces--extension module";
call charbegin('076,12,0,0,0,3pt,0);
varchar 0,0,0,'076;	%  brace extension modules only
hpen; x1=x2=good99(.5r); y1=0; y2=round(.5-3pt.pixels);
w99 draw 1..2.	% middle part of stroke
% Right braces (left-right symmetric with left ones)
charlist '011,'033,'051,'071,0;
subroutine bigrbr(var code, var units, var minps, var maxps, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w48,w49; w48=round minps; w49=round maxps;
hpen; x2=x3=x5=x6=good49(.5r);
x1-x2=x2-x4=-.5(units-3)u+eps; x1=x7;
top49y1=round height.pixels; bot49y7=1-round pixels.depth;
y4=.5[y3,y5]=good6(.5[y1,y7]);
y1-y2=y3-y4=y6-y7=(y1-y4)/4;
draw |w48#|1{3(x2-x1),y2-y1}..|w49#|2{0,-1}..|w49#|3{0,-1}..
	|w48#|4{3(x4-x3),y4-y3};	% upper stem
draw |w48#|7{3(x6-x7),y6-y7}..|w49#|6{0,1}..|w49#|5{0,1}..
	|w48#|4{3(x4-x5),y4-y5}.	% lower stem
"12 point right brace";
call bigrbr('011,9,w0,w1,0,12pt).
"24 point right brace";
call bigrbr('033,11,w10+.2deltaw,bold+deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point right brace";
call bigrbr('051,11.5,w10+.4deltaw,bold+2deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine bigrbr:.	% free up \MF's memory
new w98,w99; w98=round(w10+.6deltaw); w99=round(bold+4deltaw);
"Extensible right brace--top";
call charbegin('071,12,0,0,0,9pt,0);
varchar '071,'075,'073,'076;	% extensible right brace
hpen; x2=x3=good99(.5r); x1-x2=-4.5u+eps;
top99y1=0; y2=.5[y1,y3]; y3=round(.5-9pt.pixels);
draw |w98#|1{3(x2-x1),y2-y1}..|w99#|2{0,-1}..
	3{0,-1}.	% top of upper stem
"Extensible right brace--bottom";
call charbegin('073,12,0,0,0,9pt,0);
varchar '071,0,'072,'076;	% top right, bottom left combination
hpen; x6=x5=good99(.5r); x7-x6=-4.5u+eps;
y5=0; y6=.5[y5,y7]; bot99y7=round(.5-9pt.pixels);
draw |w98#|7{3(x6-x7),y6-y7}..|w99#|6{0,1}..
	5{0,1}.	% bottom of lower stem
"Extensible right brace--middle";
call charbegin('075,12,0,0,0,18pt,0); crsbreak -12pt.cf;
varchar 0,0,0,'067;	% right bracket extension modules only
hpen; x2=x6=x3=x5=good99(.5r); x3-x4=-4.5u+eps;
y2=good6 .25; y6=good6(.5-18pt.pixels); y4=good6(.5[y2,y6]);
y3=.5[y2,y4]; y3-y4=y4-y5;
draw |w99#|2..|w99#|3{0,-1}..
	|w98#|4{3(x4-x3),y4-y3};	% bottom of upper stem
draw |w99#|6..|w99#|5{0,1}..
	|w98#|4{3(x4-x5),y4-y5}.	% top of lower stem
% Left angle brackets (left-right symmetric with right ones)
charlist '012,'034,'052;
subroutine biglab(var code, var units, var psize, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w49; w49=round psize;
cpen; x1=x3=good49(r-u); lft49x2=round u;
top49 y1=round pixels.height; bot49y3=1-round pixels.depth;
y2=good49(.5[y1,y3]);
w49 draw 1..2..2..3.	% stroke
"12 point left angle bracket";
call biglab('012,7,w10,0,12pt).
"24 point left angle bracket";
call biglab('034,11,w1-deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point left angle bracket";
call biglab('052,11.5,w1-.8deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine biglab:.	% free up \MF's memory
% Right angle brackets (left-right symmetric with left ones)
charlist '013,'035,'053;
subroutine bigrab(var code, var units, var psize, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w49; w49=round psize;
cpen; x1=x3; r-x1=good49(r-u); lft49(r-x2)=round u;
top49 y1=round pixels.height; bot49y3=1-round pixels.depth;
y2=good49(.5[y1,y3]);
w49 draw 1..2..2..3.	% stroke
"12 point right angle bracket";
call bigrab('013,7,w10,0,12pt).
"24 point right angle bracket";
call bigrab('035,11,w1-deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point right angle bracket";
call bigrab('053,11.5,w1-.8deltaw,ph+pb,30pt-ph-pb);
call thirty.
subroutine bigrab:.	% free up \MF's memory
% Vertical lines
new w99; w99=round(w10+.2deltaw);
"Extensible vertical line--extension module";
charlist '014,0;
call charbegin('014,6,0,0,0,6pt,0);
varchar 0,0,0,'014;	% extensible vertical line
hpen; x1=x2=good99 .5r; y1=0; y2=round(.5-6pt.pixels);
w99 draw 1..2.	% stem
"Extensible double vertical line--extension module";
charlist '015,0;
call charbegin('015,10,0,0,0,6pt,0);
varchar 0,0,0,'015;	% extensible double vertical line
hpen; x1=x2=good99 .3r; x3=x4=r-x1;
y1=y3=0; y2=y4=round(.5-6pt.pixels);
w99 draw 1..2; draw 3..4.	% stems
% Slashes
charlist '016,'036,'054;
subroutine bigslash(var code, var units, var psize,
	var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
new w49; w49=round psize;
hpen; rt49x1=round(r-u); lft49x2=round u;
top49 y1=round pixels.height; bot49y2=1-round pixels.depth;
w49 draw 1..2.	% diagonal
"12 point slash";
call bigslash('016,10.4,w10+.2deltaw,0,12pt).
"24 point slash";
call bigslash('036,18.8,w10+deltaw,ph+pb,24pt-ph-pb);
call twentyfour.
"30 point slash";
call bigslash('054,23,w10+1.5deltaw,ph+pb,30pt-ph-pb);
call thirty.
% The \\{bigslash} subroutine is used also to make extrabold slashes.
"Black triangle";
call charbegin('170,9,0,0,6.25pt,0,0);
hpen; x1=x2=good0 u; x3=r-x1; y3=good6 3.125pt.pixels;
y1-y3=y3-y2=(x3-x1)/(sqrt 3);
w0 ddraw 1..3, 2..3.	% fill in the triangle
"Arrow for errata lists";
call charbegin('171,27.2,0,0,ph+pb,pd+pb,0);
vpen; x2=good0 .65r; rt5x1=x0=round(r-u);
y0=y1=y2=y5=y8=y11=y12=good10 a;
new w99; w99=2w5; top99y13=h+b; bot99y14=-d-b;
x11=0; x12=.1r; x13=.2r; x14=.55r;
draw |w5|11..12..|w5#|12..|w99#|13..13..14..
	|w99#|14..|w5#|2..2..1;	% main arrow
hpen; rt3x8=x0;
x5-x8=x8-x3=3u+eps; x3=x4=x6=x7;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
rpen#; w5+w3 draw (5..)8..3(..6);	% erase excess at lower right
hpen; draw (|w3|5..)8..|w0|3(..6);	% lower point
rpen#; w5+w3 draw (5..)8..4(..7);	% erase excess at upper right
hpen; draw (|w3|5..)8..|w0|4(..7).	% upper point
% Parts for extensible horizontal braces to match vertical ones
new ruleht,w98,w99;
ruleht=.5[pwii,pwiii]+4(pwii-pwi);	% height of extension rule
w98=round(w10+.6deltaw);
w99=round(bold+4deltaw);	% corresponds to rule height
"Extensible downwards brace--left";
call charbegin('172,4.5pt/pu,0,0,ruleht,0,0);
vpen; lft98x1=0; x2=r+1;
bot99y2=0; y1=y2-4.5u-eps;
draw |w98#|1{x2-x1,3(y2-y1)}..|w99#|2{1,0}.	% point
"Extensible downwards brace--right";
call charbegin('173,4.5pt/pu,0,0,ruleht,0,0);
vpen; rt98x1=r+1; x2=0;
bot99y2=0; y1=y2-4.5u-eps;
draw |w98#|1{x2-x1,3(y2-y1)}..|w99#|2{-1,0}.	% point
"Extensible upwards brace--left";
call charbegin('174,4.5pt/pu,0,0,ruleht,0,0);
vpen; lft98x1=0; x2=r+1;
bot99y2=0; y1=y2+4.5u+eps;
draw |w98#|1{x2-x1,3(y2-y1)}..|w99#|2{1,0}.	% point
"Extensible upwards brace--right";
call charbegin('175,4.5pt/pu,0,0,ruleht,0,0);
vpen; rt98x1=r+1; x2=0;
bot99y2=0; y1=y2+4.5u+eps;
draw |w98#|1{x2-x1,3(y2-y1)}..|w99#|2{-1,0}.	% point